ActionBar
12.01.2017 - 12:36
Arkadaşlar saatlersir hatayı bulmaya çalıştım nette arattım ama hiç bir çözüm çare olmadı.
ActionBar eklemek istiyorum kodları https://www.mobilhanem.com/android-action-bar-kullanimi/
adresinden aldım indirsim tek başına çalıştı ama kendi uygulamama eklediğimde hata verdi.
Tekrar tekrar kontrol ettim ama çözemedim.
MainActivity de 55. satırı yani actionBar.setDisplayShowTitleEnabled(false); komut dizisini gösteriyor
HATA AŞAĞIDA
01-11 21:11:40.149 1154-1154/net.netmatematik.matematik W/dalvikvm: threadid=1: thread exiting with uncaught exception (group=0xa6273288)
01-11 21:11:40.153 1154-1154/net.netmatematik.matematik E/AndroidRuntime: FATAL EXCEPTION: main
java.lang.RuntimeException: Unable to start activity ComponentInfo{net.netmatematik.matematik/net.netmatematik.matematik.MainActivity}: java.lang.NullPointerException
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2059)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2084)
at android.app.ActivityThread.access$600(ActivityThread.java:130)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1195)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:137)
at android.app.ActivityThread.main(ActivityThread.java:4745)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:511)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
at dalvik.system.NativeStart.main(Native Method)
Caused by: java.lang.NullPointerException
at net.netmatematik.matematik.MainActivity.onCreate(MainActivity.java:56)
at android.app.Activity.performCreate(Activity.java:5008)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1079)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2023)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2084)
at android.app.ActivityThread.access$600(ActivityThread.java:130)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1195)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:137)
at android.app.ActivityThread.main(ActivityThread.java:4745)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:511)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
at dalvik.system.NativeStart.main(Native Method)
AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="net.netmatematik.matematik">
<application
android:name=".MyApp"
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:supportsRtl="true"
android:logo="@drawable/logomuz"
android:theme="@style/AppTheme">
<activity android:name=".GirisEkrani">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity android:name=".MainActivity" android:label="@string/app_name" android:theme="@style/AppTheme" android:icon="@drawable/logomuz"></activity>
<activity android:name=".Matematik" android:label="@string/app_name" android:theme="@style/AppTheme"></activity>
<activity android:name=".MatematikGoster" android:label="@string/app_name" android:theme="@style/AppTheme"></activity>
<activity android:name=".Mufredat" android:label="@string/app_name" android:theme="@style/AppTheme"></activity>
<activity android:name=".Geometri" android:label="@string/app_name" android:theme="@style/AppTheme"></activity>
<activity
android:name=".Ayarlar"
android:parentActivityName=".MainActivity" ><!-- Bunu ekleyerek Action Bar ile geri gelmek istediğimiz sayfayı seçiyoruz -->
>
</activity>
</application>
</manifest>
Ayarlar.java
package net.netmatematik.matematik;
import android.app.Activity;
import android.os.Bundle;
public class Ayarlar extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.ayarlar);
}
}
MainActivity.class
package net.netmatematik.matematik;
import android.app.ActionBar;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.os.Handler;
import android.support.v7.app.ActionBarActivity;
import android.support.v7.app.AppCompatActivity;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewConfiguration;
import android.widget.AdapterView;
import android.widget.LinearLayout;
import android.widget.ListView;
import android.widget.Toast;
import com.google.android.gms.analytics.HitBuilders;
import com.google.android.gms.analytics.Tracker;
import com.google.android.gms.ads.*;
import java.lang.reflect.Field;
public class MainActivity extends AppCompatActivity {
//ACTİONBAR
private ActionBar actionBar;
private Menu optionsMenu;
//ACTİONBAR
//TAM EKRAN REKLAM
private InterstitialAd interstitial;
private static final String REKLAM_ID = "ca-app-pub-1187547260308799/5096169861";
//TAM EKRAN REKLAM
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// getActionBar().setDisplayHomeAsUpEnabled(true);
//ACTİONBAR
actionBar = getActionBar();
ActionBar actionBar = getActionBar();
actionBar.setDisplayShowTitleEnabled(false);
actionBar.setDisplayUseLogoEnabled(true);
getOverflowMenu();
//Google Analitik için
Tracker t = ((MyApp) getApplication()).getTracker(MyApp.TrackerName.APP_TRACKER);
t.setScreenName("Ana Sayfa");
t.send(new HitBuilders.ScreenViewBuilder().build());
ListView listview1;
listview1 = (ListView) findViewById(R.id.listView1);
OzelListViewBilgi bankaDizi[] = new OzelListViewBilgi[]{
new OzelListViewBilgi(1, "Matematik", "YGS Konuları", R.drawable.math120),
new OzelListViewBilgi(2, "2016-2017", "Matematik Müfredatı", R.drawable.geometri120),
};
final OzelListViewAdaptor adaptir = (new OzelListViewAdaptor(this, R.layout.activity_mainlistele, bankaDizi));
listview1.setAdapter(adaptir);
listview1.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> arg0, View arg1, int position, long arg3) {
switch (position) {
case 0:
startActivity(new Intent(getApplicationContext(), Matematik.class));
break;
case 1:
startActivity(new Intent(getApplicationContext(), Geometri.class));
break;
}
}
});
}
//ACTİONBAR
@Override
public boolean onCreateOptionsMenu(Menu menu) {//Menüyü oluşturuyoruz
this.optionsMenu = menu;
MenuInflater inflater = getMenuInflater();// inflater herhangi bir view ın java objesine dönüştürülüp düzenlenmesinde yardımcı olur.Burda menü düzenlenmesi için kullanacağız
inflater.inflate(R.menu.anasayfa_menu, menu);//Xml olarak oluşturduğumuz menü yü alıyoruz
return super.onCreateOptionsMenu(menu);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.action_settings: //settings iconu tıklandığında
settings();
break;
case R.id.action_share: //share iconu
share();
break;
case R.id.action_location_found:
location();
break;
case R.id.action_refresh://refresh iconu
refresh();
return true;
case R.id.action_help://help iconu
help();
break;
default:
return super.onOptionsItemSelected(item);
}
return true;
}
public void share(){
Intent sharingIntent = new Intent(android.content.Intent.ACTION_SEND);
sharingIntent.setType("text/plain");
String shareMesaj = "mobilhanem.com tarafından gönderildi";
sharingIntent.putExtra(android.content.Intent.EXTRA_SUBJECT, "Mesaj Konu");
sharingIntent.putExtra(android.content.Intent.EXTRA_TEXT, shareMesaj);
startActivity(Intent.createChooser(sharingIntent, "Paylaşmak İçin Seçiniz"));
}
public void settings(){
Intent myIntent = new Intent(getApplicationContext(), Ayarlar.class);
startActivity(myIntent);
}
public void location(){//Google map açıcak q=Ankara ile konumumuzdan ankaraya nasıl gideceğimizi göstericek
Intent intent = new Intent(android.content.Intent.ACTION_VIEW, Uri.parse("google.navigation:q=Ankara"));
startActivity(intent);
}
public void help(){
AlertDialog alertDialog = new AlertDialog.Builder(MainActivity.this).create();
alertDialog.setTitle("Mesaj");
alertDialog.setMessage("Yardıma mı ihtiyaç var?");
alertDialog.setCancelable(false);
alertDialog.setButton(RESULT_OK,"Tamam", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
}
});
alertDialog.show();
}
public void refresh(){
setRefreshActionButtonState(true);//progress bar refresh iconla değişecek ve çalışacak .
final Handler handler = new Handler();
handler.postDelayed(new Runnable() {
@Override
public void run() {
setRefreshActionButtonState(false);//3 sn sonra duracak ve refresh iconu geri gelecek. Siz bu arada başka işlemler sunucu bağlantısı vs.. yapabilirsiniz
}
}, 3000);
}
public void setRefreshActionButtonState(final boolean refreshing) {
//bu method refresh iteme tıklandığında progress bar gözükmesi için
if (optionsMenu != null) {
final MenuItem refreshItem = optionsMenu
.findItem(R.id.action_refresh);
if (refreshItem != null) {
if (refreshing) {
refreshItem.setActionView(R.layout.actionbar_refresh_progress);
} else {
refreshItem.setActionView(null);
}
}
}
}
private void getOverflowMenu() {
//Arkadaşlar bu method overflow menu için
//Bazı cihazlarda action bar a sığmayan actionlar açılır menu de deilde cihazın menu buttonuna basınca klasik android options menu gibi açılıyor
//Bu methodu onCreate içinde çağırarak actionBar a sığmayan action ları overFlow menude gösteriyoruz.
try {
ViewConfiguration config = ViewConfiguration.get(this);
Field menuKeyField = ViewConfiguration.class.getDeclaredField("sHasPermanentMenuKey");
if(menuKeyField != null) {
menuKeyField.setAccessible(true);
menuKeyField.setBoolean(config, false);
}
} catch (Exception e) {
e.printStackTrace();
}
}
//ACTİONBAR
}
Menu dosyası
anasayfa_menu.xml
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<item android:id="@+id/action_share"
android:icon="@drawable/ic_action_share"
android:title="Paylaş"
app:showAsAction="always" />
<item android:id="@+id/action_settings"
android:icon="@drawable/ic_action_settings"
android:title="Paylaş"
app:showAsAction="always" />
<!-- Refresh -->
<item android:id="@+id/action_refresh"
android:icon="@drawable/ic_action_refresh"
android:title="Yenile"
app:showAsAction="always" />
<!-- Location Found -->
<item android:id="@+id/action_location_found"
android:icon="@drawable/ic_action_location_found"
android:title="Yer"
app:showAsAction="always" />
<!-- Help -->
<item android:id="@+id/action_help"
android:icon="@drawable/ic_action_help"
android:title="Yardım"
app:showAsAction="ifRoom"/>
</menu>
style.xml
<resources>
<style name="AppTheme"
parent="Theme.AppCompat.Light.DarkActionBar">
</style>
<style name="AppBaseTheme" parent="android:Theme.Light">
</style>
</resources>
11
Görüntülenme
0 Beğeni